package com.star.system.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.star.mentor.dto.MentorUpdateWxmentorDTO;
import com.star.system.dto.*;
import com.star.system.entity.User;
import com.star.system.vo.LoginInfoVO;
import com.star.system.vo.UserPageVO;

import java.util.List;

/**
 * 用户 服务类
 *
 * @author yangzj
 */
public interface UserService extends IService<User> {

    //-------------------- 以下管理后台接口 --------------------

    /**
     * 保存
     *
     * @param dto dto
     */
    void save(UserSaveDTO dto);

    /**
     * 更新
     *
     * @param dto             dto
     * @param isUpdateRole 更新角色
     */
    void update(UserUpdateDTO dto, boolean isUpdateRole);

    /**
     * 更新启用
     *
     * @param id      id
     * @param enabled 启用
     */
    void updateEnabled(Long id, boolean enabled);

    /**
     * 更新密码
     *
     * @param dto dto
     */
    void updatePassword(UpdatePasswordDTO dto);

    /**
     * 设置首次密码
     *
     * @param dto 入参
     */
    void setFirstPassword(SetFirstPasswordDTO dto);

    /**
     * 删除由ids
     *
     * @param ids id
     */
    void deleteByIds(List<Long> ids);

    /**
     * 分页
     *
     * @param dto 入参
     * @return {@link IPage}<{@link UserPageVO}>
     */
    IPage<UserPageVO> page(UserPageDTO dto);

    //-------------------- 以下微信小程序接口 --------------------

    /**
     * 更新喜欢风格
     *
     * @param styles 样式
     * @param id     ID
     */
    void updateWxappStyles(String styles, Long id);

    /**
     * 更新用户信息-微信小程序
     *
     * @param dto dto
     */
    void updateWxappUser(UserUpdateWxappDTO dto);

    /**
     * 更新电话-微信小程序
     *
     * @param userId 用户id
     * @param code   代码
     * @param type   类型
     */
    void updateWxappPhone(Long userId, String code, Integer type);

    /**
     * 更新导师用户信息
     *
     * @param dto 入参
     */
    void updateMentorInfo(MentorUpdateWxmentorDTO dto);

    //-------------------- 以下通用接口 --------------------

    /**
     * 获取用户详情
     *
     * @param id id
     * @return {@link LoginInfoVO}
     */
    LoginInfoVO getLoginInfo(Long id);

    /**
     * 获取提示
     *
     * @param id ID
     * @return {@link String}
     */
    String getTips(Long id);

    /**
     * 更新提示
     *
     * @param id   ID
     * @param tips 提示
     */
    void updateTips(Long id, String tips);
}
